import java.util.ArrayList;
import java.util.List;

/**
 * 
 */

/**
 * @author chaoking
 *
 */
public class Util {

	public static double[][] reverse(double[][] data) {
		double[][] temp = new double[data[0].length][data.length];
		for (int i = 0; i < data.length; i++) {
			for (int j = 0; j < data[i].length; j++) {
				temp[j][i] = data[i][j];
			}
		}
		return temp;
	}

	public static List<ArrayList<ArrayList<Double>>> cal(
			List<ArrayList<ArrayList<Double>>> qk, int a, int b, int c, int d) {
		List<ArrayList<ArrayList<Double>>> q = new ArrayList<ArrayList<ArrayList<Double>>>();

		ArrayList<ArrayList<Double>> temp1 = new ArrayList<ArrayList<Double>>();

		for (int i = 0; i < qk.get(0).size(); i++) {
			double sum1, sum2, sum3;
			sum1 = sum2 = sum3 = 0;
			for (int j = 0; j < a; j++) {
				sum1 += qk.get(j).get(i).get(0);
				sum2 += qk.get(j).get(i).get(1);
				sum3 += qk.get(j).get(i).get(2);
			}
			List<Double> temp12 = new ArrayList<Double>();
			temp12.add(sum1);
			temp12.add(sum2);
			temp12.add(sum3);
			temp1.add((ArrayList<Double>) temp12);
		}
		q.add(temp1);

		ArrayList<ArrayList<Double>> temp2 = new ArrayList<ArrayList<Double>>();

		for (int i = 0; i < qk.get(0).size(); i++) {
			double sum1, sum2, sum3;
			sum1 = sum2 = sum3 = 0;
			for (int j = a; j < a+b; j++) {
				sum1 += qk.get(j).get(i).get(0);
				sum2 += qk.get(j).get(i).get(1);
				sum3 += qk.get(j).get(i).get(2);
			}
			List<Double> temp22 = new ArrayList<Double>();
			temp22.add(sum1);
			temp22.add(sum2);
			temp22.add(sum3);
			temp2.add((ArrayList<Double>) temp22);
		}
		q.add(temp2);

		ArrayList<ArrayList<Double>> temp3 = new ArrayList<ArrayList<Double>>();

		for (int i = 0; i < qk.get(0).size(); i++) {
			double sum1, sum2, sum3;
			sum1 = sum2 = sum3 = 0;
			for (int j = a+b; j < a+b+c; j++) {
				sum1 += qk.get(j).get(i).get(0);
				sum2 += qk.get(j).get(i).get(1);
				sum3 += qk.get(j).get(i).get(2);
			}
			List<Double> temp32 = new ArrayList<Double>();
			temp32.add(sum1);
			temp32.add(sum2);
			temp32.add(sum3);
			temp3.add((ArrayList<Double>) temp32);
		}
		q.add(temp3);

		ArrayList<ArrayList<Double>> temp4 = new ArrayList<ArrayList<Double>>();

		for (int i = 0; i < qk.get(0).size(); i++) {
			double sum1, sum2, sum3;
			sum1 = sum2 = sum3 = 0;
			for (int j = a+b+c; j < a+b+c+d; j++) {
				sum1 += qk.get(j).get(i).get(0);
				sum2 += qk.get(j).get(i).get(1);
				sum3 += qk.get(j).get(i).get(2);
			}
			List<Double> temp42 = new ArrayList<Double>();
			temp42.add(sum1);
			temp42.add(sum2);
			temp42.add(sum3);
			temp4.add((ArrayList<Double>) temp42);
		}
		q.add(temp4);

		return q;

	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		double[][] data = new double[4][3];
		for (int i = 0; i < data.length; i++) {
			for (int j = 0; j < data[i].length; j++) {
				data[i][j] = i * j;
				System.out.print(data[i][j] + " ");
			}
			System.out.println();
		}
		double[][] temp = Util.reverse(data);
		for (int i = 0; i < temp.length; i++) {
			for (int j = 0; j < temp[i].length; j++) {
				System.out.print(temp[i][j] + " ");
			}
			System.out.println();
		}
	}

}
